home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr48 / pas_0593.zip / C8253.PAS < prev    next >
Pascal/Delphi Source File  |  1993-05-30  |  3KB  |  71 lines

  1. {─ Fido Pascal Conference ────────────────────────────────────────────── PASCAL ─
  2. Msg  : 503 of 527
  3. From : David Dahl                          1:272/38.0           15 May 93  03:46
  4. To   : Mark Lewis
  5. Subj : Timer...
  6. ────────────────────────────────────────────────────────────────────────────────
  7.  -=> Quoting Mark Lewis to David Dahl <=-
  8.  
  9.  > Uses C8253,   { C8253.TPU is the routines I gave you
  10.  >                 last message compiled into a unit
  11.  
  12.  ML> how big is this unit?? how long ago did you post it?? can you post it
  13.  ML> again?? if not, where can i grab a copy of it from??
  14.  
  15.         I never posted it as a unit.  I just posted a couple
  16. routines to set the timer.  They're actually a part of another,
  17. larger project I've been working on to play digitized sound out
  18. of several different output devices.  When I was asked if it were
  19. possible to speed up the tick and still have DOS's timer function
  20. behave normally, I threw them into a unit and wrote the program
  21. you quoted from to illustrate how it would be done.  Here are the
  22. timer routines as a unit:}
  23.  
  24.  
  25. Unit C8253;
  26.  
  27. (* PUBLIC DOMAIN *)
  28.  
  29. Interface
  30.  
  31. Procedure SetPlaySpeed          (Speed : LongInt);
  32. Procedure SetDefaultTimerSpeed;
  33. Procedure Set8253Channel        (ChannelNumber : Byte;
  34.                                  ProgramValue  : Word);
  35.  
  36. Implementation
  37.  
  38. Const C8253ModeControl   = $43;
  39.       C8253Channel       : Array[0..2] of Byte = ($40, $41, $42);
  40.       C8253OperatingFreq = 1193180;
  41.  
  42. {=[ 8253 Timer Programming Routines ]=====================================}
  43. Procedure Set8253Channel (ChannelNumber : Byte;
  44.                           ProgramValue  : Word);
  45. Begin
  46.      Port[C8253ModeControl] := 54 OR (ChannelNumber SHL 6); { XX110110 }
  47.      Port[C8253Channel[ChannelNumber]] := Lo(ProgramValue);
  48.      Port[C8253Channel[ChannelNumber]] := Hi(ProgramValue);
  49. End;
  50. {-[ Set Clock Channel 0 (INT 8, IRQ 0) To Input Speed ]-------------------}
  51. Procedure SetPlaySpeed (Speed : LongInt);
  52. Var ProgramValue : Word;
  53. Begin
  54.      ProgramValue := C8253OperatingFreq DIV Speed;
  55.  
  56.      Set8253Channel (0, ProgramValue);
  57. End;
  58. {-[ Set Clock Channel 0 Back To 18.2 Default Value ]----------------------}
  59. Procedure SetDefaultTimerSpeed;
  60. Begin
  61.      Set8253Channel (0, 0);
  62. End;
  63. End.
  64.  
  65.  
  66. The routines perform no error checking on input values, so be careful 
  67. with them.  The procedure Set8253Channel should never have a 
  68. channel value of more than 2 since the 8253 only has 3 channels 
  69. (0 - 2).  
  70.  
  71.                                                 Dave